TIMER

您所在的位置:网站首页 西门子plc tof指令怎么用 TIMER

TIMER

2024-07-02 13:47| 来源: 网络整理| 查看: 265

S7-1200 定时器

S7-1200的定时器为IEC定时器,用户程序中可以使用的定时器数量仅仅受CPU的存储器容量限制。 使用定时器需要使用定时器相关的背景数据块或者数据类型为IEC_TIMER(或TP_TIME、TON_TIME、TOF_TIME、TONR_TIME)的DB块变量,不同的上述变量代表着不同的定时器。

注:S7-1200的IEC定时器没有定时器号(即没有T0、T37这种带定时器号的定时器)。

S7-1200包含四种定时器:

生成脉冲定时器(TP) 接通延时定时器(TON) 关断延时定时器(TOF) 时间累加器(TONR)

此外还包含复位定时器(RT)和加载持续时间(PT)这两个指令。

指令位置参见图1,定时器引脚参考表1,定时器使用及时序图参考表2。 这四种定时器又都有功能框和线圈型两种,区别参见常见问题3。

图1 指令位置

表1定时器引脚汇总

输入的变量 名称 说明 数据类型 备注 IN 输入位 BOOL TP、TON、TONR:0=禁用定时器,1=启用定时器 TOF:0=启用定时器,1=禁用定时器 PT 设定的时间输入 TIME   R 复位 BOOL 仅出现在TONR指令 输出的变量 名称 说明     Q 输出位 BOOL   ET 已计时的时间 TIME  

表2定时器使用及时序图

指令 说明 时序图

生成脉冲 LAD: 或-( TP )- SCL:TP

IN从“0”变为“1”,定时器启动,Q立即输出“1”;当ET程序资源”中,从TIA博途V11开始,线圈型指令同样适用,参见图11。

图11 新建IEC_TIMER类型DB

S7-1200 定时器常见问题

1. 为什么定时器不计时?

答:可能原因如下:

(1)定时器的输入位需要有电平信号的跳变,定时器才会开始计时。如果保持不变的信号作为输入位是不会开始计时的。TP、TON、TONR需要IN从“0”变为“1”启动,TOF需要IN从“1”变为“0”启动。

(2)定时器的背景数据块重复使用。

(3)只有在定时器功能框的Q点或ET连接变量,或者在程序中使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET,定时器才会开始计时,并且更新定时时间。参考表3。

表3 定时器的使用

示例 计时与否

不计时

原因:定时器功能框的Q或ET既没有连接变量,也没有使用背景数据块的Q或者ET

计时

原因:定时器功能框的Q连接变量

计时

原因:定时器功能框的ET连接变量

计时

原因:使用背景数据块的Q

计时

使用背景数据块的ET

2. 如何编程自复位定时器并产生脉冲?

答:正确答案参考表4,同时附上2种常见错误编程方式。 原因:S7-1200的定时器的时间更新发生在定时器功能框的Q点或ET连接变量时,或者在程序中使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET时。即如果程序中多次使用同一背景DB的Q点,或者既使用定时器功能框的Q点或ET连接变量,又使用背景DB的Q点,以上两种情况都会造成定时器在一个扫描周期内的多次更新,可能造成定时器不能正常使用的情况。

表4 自复位定时器示例

示例 正确与否 正确

错误

多次使用同一背景DB的Q点

错误

同时使用背景DB的Q点以及定时器功能框的Q点连接变量

正确方法的流程,将程序根据指令分为两部分,如图12所示:

图12 分解正确指令

阶段1.初始"DB2".脉冲=False,于是"DB2".脉冲取反为True,触发计时器开始计时,输出的"DB2".脉冲=False,状态不变;定时时间不到,则始终在阶段1;

阶段2.当定时时间到发生在①所处的位置,在TON处定时器更新,Q输出True,因此输出的"DB2".脉冲=True,等到下周期时"DB2".脉冲取反为False,导致输出的"DB2".脉冲=False,等再到下周期时就回到了阶段1;

阶段3.当定时时间到发生在②所处的位置,不影响定时器的更新,需要到下一周期才会改变输出,就回到了阶段2。

从上可知,定时器实现了自复位,并且"DB2".脉冲=True只保持一个周期,形成了脉冲。

以第一个错误方法解释一下为什么这种方法不能实现自复位定时器并产生脉冲,如图13所示,将程序根据指令分为三部分:

图13 分解错误指令

阶段1.初始第一行"IEC_Timer_0_DB".Q=False,触发计时器开始计时,第二行,当定时时间不到,"IEC_Timer_0_DB".Q=False保持不变,输出的"DB2".脉冲=False;定时时间不到,则始终在阶段1;

阶段2.当定时时间到发生在①所处的位置,在第一行的"IEC_Timer_0_DB".Q处定时器更新,更新后,"IEC_Timer_0_DB".Q=True,取反为False,此时作为TON的输入,使得定时器复位,第二行的"IEC_Timer_0_DB".Q=False,输出的"DB2".脉冲=False,到下周期时就回到了阶段1;

阶段3.当定时时间到发生在②所处的位置,在第二行的"IEC_Timer_0_DB".Q处定时器更新,更新后,"IEC_Timer_0_DB".Q=True,输出的"DB2".脉冲=True,等到下周期时,"IEC_Timer_0_DB".Q=True,取反为False,此时作为TON的输入,使得定时器复位,第二行的"IEC_Timer_0_DB".Q=False,输出的"DB2".脉冲=False,等再到下周期时就回到了阶段1;

阶段4.当定时时间到发生在③所处的位置,不影响定时器的更新,需要到下一周期才会改变输出,就回到了阶段2。

从上可知无论定时器时间到发生在哪个点,定时器都可以实现自复位,但是只有当定时时间到发生在②所处的位置时,"DB2".脉冲=True只保持一个周期,形成了脉冲,而在①和③时"DB2".脉冲始终为False无法形成脉冲。在正常程序中②的执行时间在整个扫描周期中占比很小,因此只有很低的概率可以实现脉冲。所以不能使用此种方法,第二个错误方法与之类似。

3. 如何使用定时器实现精确定时?

答:不能做到。

举例来说,定时1s的接通延时定时器,当程序扫描到定时器功能框的Q点或ET时或者扫描到背景DB(或IEC_TIMER类型的变量)中的Q点或者ET时,如果时间为997ms,只会继续定时等下一次扫描,而下一次扫描到可能就是1003ms,此时定时器接通。也就是说几乎不可能正好1s接通,如果再配合计数器实现更长时间的定时,误差只会越来越大。

所以精确定时还是推荐使用循环中断(OB30)配合计数器来实现。

4. 定时器指令中,功能框和线圈型的区别?

答:原理上是完全一样的,细微区别:

(1) 功能框定时器上可以定义Q点或ET,在程序中可以不必出现背景DB(或IEC_TIMER类型的变量)中的Q点或者ET;而线圈型定时器必须使用背景DB(或IEC_TIMER类型的变量)中的Q点或者ET;

(2) 功能框定时器在使用时可以自动提示生成背景块,或者选择不生成;而线圈型定时器只能通过手动方式建立背景块;

(3) 线圈型定时器如果出现在网络段中间时不影响RLO的变化,如图14所示,"DB46".Static_1和I1.0同步变化。

图14 线圈型定时器示例

 

 

 



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3